
module sn76489_attenuator(
  input  wire [3:0] attenuation_i,
  input  wire [1:0] factor_i,
  output reg  [7:0] product_o
);

reg [7:0] volume_v;
always @(*)begin
    case(attenuation_i)
    4'h0: volume_v = 8'd31;
    4'h1: volume_v = 8'd25;
    4'h2: volume_v = 8'd20;
    4'h3: volume_v = 8'd16;
    4'h4: volume_v = 8'd12;
    4'h5: volume_v = 8'd10;
    4'h6: volume_v = 8'd8;
    4'h7: volume_v = 8'd6;
    4'h8: volume_v = 8'd5;
    4'h9: volume_v = 8'd4;
    4'hA: volume_v = 8'd3;
    4'hB: volume_v = 8'd2;
    4'hC: volume_v = 8'd2;
    4'hD: volume_v = 8'd2;
    4'hE: volume_v = 8'd1;
    4'hF: volume_v = 8'd0;
    endcase
end

always @(*)begin
    case(factor_i)
    2'b01  : product_o = volume_v;
    2'b11  : product_o = (~volume_v) + 1'b1;
    default: product_o = 8'b0;
    endcase
end

endmodule

